import { createClient } from '@supabase/supabase-js';

const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;

if (!supabaseUrl || !supabaseAnonKey) {
  console.error('环境变量未设置: VITE_SUPABASE_URL 或 VITE_SUPABASE_ANON_KEY');
  throw new Error('缺少Supabase环境变量，请在.env文件中设置');
}

console.log('初始化Supabase连接，地址:', supabaseUrl);

// 创建自定义fetch函数用于处理响应头
const customFetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
  // 添加缓存控制头
  const options = init || {};
  if (!options.headers) {
    options.headers = {};
}
  // 克隆headers以避免修改只读对象
  const headers = new Headers(options.headers as HeadersInit);
  headers.set('Cache-Control', 'no-cache, no-store, must-revalidate');
  headers.set('Pragma', 'no-cache');
  headers.set('Expires', '0');
  
  options.headers = headers;
  
  const response = await fetch(input, options);
  return response;
};

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    persistSession: true,
    storageKey: 'supabase.auth.token',
    storage: localStorage,
    autoRefreshToken: true,
    detectSessionInUrl: true
  },
  global: {
    headers: {
      apikey: supabaseAnonKey
    },
    // 使用自定义fetch实现
    fetch: customFetch
  },
  // 增加请求超时时间
  db: {
    schema: 'public'
  },
  realtime: {
    params: {
      eventsPerSecond: 10
    }
  }
});

// 监听认证状态变化
supabase.auth.onAuthStateChange((event, session) => {
  console.log(`认证状态改变: ${event}`, session ? 'session有效' : 'session无效');
  
  // 在登录时重新验证连接
  if (event === 'SIGNED_IN' && session) {
    // 测试数据库连接
    supabase
      .from('bots')
      .select('count', { count: 'exact', head: true })
      .then(({ error }) => {
        if (error) {
          console.error('数据库连接测试失败:', error.message);
        } else {
          console.log('数据库连接测试成功');
        }
      });
  }
});